"""
Model for the final application 
"""
__author__ = 'miltonlab'
__date__ = '07 de julio de 2011'

class ListaVideos:

  def __init__(self):
    self.lista = []

  def promedio(self):
    try:
      return sum([v.duracion for v in self.lista])/len(self.lista)
    except Exception as e:
      print 'error en promedio'

  def categorias(self):
    " Con repeticiones "
    cats = [v.categoria for v in self.lista]
    dic = dict()
    for c in cats:
      dic[c] = cats.count(c)
    return dic
    
  def agregar(self,v):
    self.lista.append(v)

  def max_duracion_largo(self):
    m =  max([v.duracion for v in self.lista])
    ee = [v for v in self.lista if v.duracion == m]
    return ee[0]

  def max_duracion(self):
    return max(self.lista)
  
  def cargar(self,archivo):
    import codecs
    f = codecs.open(archivo,encoding='utf-8',mode='r')
    for l in f.readlines():
      ll = l.split('\t')
      self.lista.append(Video(ll[0],int(ll[1]),ll[2],ll[3]))
    f.close()

  def ordenar(self):
    self.lista.sort()

  def invertir(self):
    self.lista.reverse()
    
  def __str__(self):
    return str(self.lista)


  
class Video:

  def __init__(self, nombre='', duracion=0, categoria='', medio=''):
    self.nombre = nombre
    self.duracion = duracion
    self.categoria = categoria
    self.medio = medio

  def __cmp__(self,elotro):
    return self.duracion.__cmp__(elotro.duracion)

  def __str__(self):
    return '%s=%d' % (self.nombre, self.duracion)

  def __repr__(self):
    return self.__str__()

def test():
  videos = ListaVideos()
  videos.cargar('data.txt')
  print 'Lista: ',videos
  print 'Categorias: ',videos.categorias()
  print 'Promedio: ',videos.promedio()
  print 'Videos que contienen la \'r\':'
  print [v.nombre for v in videos.lista if 'r' in v.nombre or 'R' in v.nombre]
  print 'Maxima duracion: ',videos.max_duracion()
  # Gracias magia del __cmp__ en la clase Video
  videos.ordenar()  
  print 'Ordenados: ',videos
  videos.invertir()
  print 'Inverso: ',videos
  
if __name__ == '__main__':
  test()
